const vscode = require('vscode');
const fs = require('fs');
const path = require('path')
const vscodePath = require('./vscodePath')

let oldConfig = {}
const live2dFilePath_1 = path.join(__dirname, 'resources', 'L2Dwidget.0.min.js')
const live2dFilePath_2 = path.join(__dirname, 'resources', 'L2Dwidget.min.js')
const live2dFile_1 = fs.readFileSync(live2dFilePath_1, 'utf-8')
const live2dFile_2 = fs.readFileSync(live2dFilePath_2, 'utf-8')
const live2dFile_1_outDir = path.join(vscodePath.vsHtmlDir, 'L2Dwidget.0.min.js')
const live2dFile_2_outDir = path.join(vscodePath.vsHtmlDir, 'L2Dwidget.min.js')
const live2dLoadFile_outDir = path.join(vscodePath.vsHtmlDir, 'initLive2d.js')

const loadResources = () => {
    const newConfig = vscode.workspace.getConfiguration('miniHelper')
    
    // 插件配置没有改变，不重新加载文件
    if (JSON.stringify(newConfig) === JSON.stringify(oldConfig)) {
        return false
    }

    // 安装live2d加载基础文件_1
    if(fs.existsSync(live2dFile_1_outDir)) {
        console.log('已存在资源-L2Dwidget.0.min.js')
    } else {
        fs.writeFileSync(live2dFile_1_outDir, live2dFile_1, 'utf-8')
    }

    // 安装live2d加载基础文件_2
    if(fs.existsSync(live2dFile_2_outDir)) {
        console.log('已存在资源-L2Dwidget.min.js')
    } else {
        fs.writeFileSync(live2dFile_2_outDir, live2dFile_2, 'utf-8')
    }

    // live2d加载文件引入
    const live2dLoadFile = `
        L2Dwidget
        .init({
            "model": {
                "scale": ${newConfig.scale < 0 || newConfig.scale > 1 ? 0.6 : newConfig.scale },
                "jsonPath": "${newConfig.resources}"
            },
            "display": {
                "position": "right",
                "display": "${newConfig.enabled ? 'block' : 'none'}",
                "width": 180,
                "height": 260,
                "hOffset": 0,
                "vOffset": 0,
                "zIndex": 2,
            },
            dialog: {
                // 开启对话框
                enable: true,
                script: {
                    // 每空闲 x 秒钟，显示一条一言
                    'every idle ${~~newConfig.hitokotoInterval ? ~~newConfig.hitokotoInterval : 300}s': '$hitokoto$',
                    // 当触摸到角色身体
                    'tap body': '哎呀！别碰我！',
                    // 当触摸到角色头部
                    'tap face': '人家已经不是小孩子了！'
                }
            }
        });
    `
    fs.writeFileSync(live2dLoadFile_outDir, live2dLoadFile, 'utf-8')
    oldConfig = newConfig
}

const removeResources = () => {
    // 卸载live2d加载基础文件_1
    if(fs.existsSync(live2dFile_1_outDir)) {
        fs.unlinkSync(live2dFile_1_outDir)
    }

    // 卸载live2d加载基础文件_2
    if(fs.existsSync(live2dFile_2_outDir)) {
        fs.unlinkSync(live2dFile_2_outDir)
    }

    // 卸载live2d启动文件
    if(fs.existsSync(live2dLoadFile_outDir)) {
        fs.unlinkSync(live2dLoadFile_outDir)
    }
}

module.exports = {
    loadResources,
    removeResources
}